home *** CD-ROM | disk | FTP | other *** search
/ The Complete Utilities To…ka 501 Killer Utilities! / 501 Killer Utilities! (Macworld July 1995).cdr / Programming / Glypha III Src / Code / SetUpTakeDown.c < prev    next >
Encoding:
Text File  |  1995-01-31  |  14.3 KB  |  505 lines  |  [TEXT/MPCC]

  1.  
  2. //============================================================================
  3. //----------------------------------------------------------------------------
  4. //                                SetUpTakeDown.c
  5. //----------------------------------------------------------------------------
  6. //============================================================================
  7.  
  8.  
  9. #include "Externs.h"
  10. #include <Palettes.h>
  11.  
  12.  
  13. #define kHandPictID                128
  14. #define kHandMaskID                129
  15. #define kBackgroundPictID        130
  16. #define kHelpPictID                131
  17. #define kObeliskPictID            134
  18. #define kPlayerPictID            135
  19. #define kPlayerMaskID            136
  20. #define kNumberPictID            137
  21. #define kIdlePictID                138
  22. #define kEnemyWalkPictID        139
  23. #define kEnemyFlyPictID            140
  24. #define kEnemyWalkMaskID        141
  25. #define kEnemyFlyMaskID            142
  26. #define kFlamePictID            143
  27. #define kEggPictID                144
  28. #define kEggMaskID                145
  29. #define kPlatformPictID            146
  30. #define kEyePictID                147
  31. #define kEyeMaskID                148
  32.  
  33.  
  34. Boolean DoWeHaveColor (void);
  35. Boolean DoWeHaveSystem605 (void);
  36. short WhatsOurDepth (void);
  37. Boolean CanWeDisplay8Bit (GDHandle);
  38. void SwitchToDepth (short, Boolean);
  39.  
  40.  
  41. short        wasDepth;
  42.  
  43. extern    Rect        mainWindowRect, backSrcRect, workSrcRect, obSrcRect, playerSrcRect;
  44. extern    Rect        numberSrcRect, idleSrcRect, enemyWalkSrcRect, enemyFlySrcRect;
  45. extern    Rect        obeliskRects[4], playerRects[11], numbersSrc[11], numbersDest[11];
  46. extern    Rect        platformRects[6], touchDownRects[6], enemyRects[24], handSrcRect;
  47. extern    Rect        flameSrcRect, flameDestRects[2], flameRects[4], platformCopyRects[9];
  48. extern    Rect        enemyInitRects[5], eggSrcRect, platformSrcRect, helpSrcRect;
  49. extern    Rect        handRects[2], grabZone, eyeSrcRect, eyeRects[4];
  50. extern    GDHandle    thisGDevice;
  51. extern    CGrafPtr    backSrcMap, workSrcMap, obeliskSrcMap, playerSrcMap;
  52. extern    CGrafPtr    numberSrcMap, idleSrcMap, enemyWalkSrcMap, enemyFlySrcMap;
  53. extern    CGrafPtr    flameSrcMap, eggSrcMap, platformSrcMap, helpSrcMap, handSrcMap;
  54. extern    CGrafPtr    eyeSrcMap;
  55. extern    GrafPtr        playerMaskMap, enemyWalkMaskMap, enemyFlyMaskMap, eggMaskMap;
  56. extern    GrafPtr        handMaskMap, eyeMaskMap;
  57. extern    WindowPtr    mainWindow;
  58. extern    RgnHandle    playRgn;
  59. extern    MenuHandle    appleMenu, gameMenu, optionsMenu;
  60. extern    long        theScore, wasTensOfThousands;
  61. extern    short        numLedges, beginOnLevel, levelOn, livesLeft;
  62. extern    Boolean        quitting, playing, pausing, switchedOut, canPlay, whichList;
  63. extern    Boolean        helpOpen, scoresOpen, openTheScores;
  64.  
  65.  
  66. //==============================================================  Functions
  67. //--------------------------------------------------------------  ToolBoxInit
  68.  
  69. void ToolBoxInit (void)
  70. {
  71.     InitGraf(&qd.thePort);
  72.     InitFonts();
  73.     FlushEvents(everyEvent, 0);
  74.     InitWindows();
  75.     InitMenus();
  76.     TEInit();
  77.     InitDialogs(0L);
  78.     InitCursor();
  79.     
  80.     MaxApplZone();
  81.     
  82.     MoreMasters();
  83.     MoreMasters();
  84.     MoreMasters();
  85.     MoreMasters();
  86.     
  87.     switchedOut = FALSE;
  88.     GetDateTime((unsigned long *)&qd.randSeed);
  89. }
  90.  
  91. //--------------------------------------------------------------  DoWeHaveColor  
  92.  
  93. Boolean DoWeHaveColor (void)
  94. {
  95.     SysEnvRec        thisWorld;
  96.     
  97.     SysEnvirons(2, &thisWorld);
  98.     return (thisWorld.hasColorQD);
  99. }
  100.  
  101. //--------------------------------------------------------------  DoWeHaveSystem605  
  102.  
  103. Boolean DoWeHaveSystem605 (void)
  104. {
  105.     SysEnvRec        thisWorld;
  106.     Boolean            haveIt;
  107.     
  108.     SysEnvirons(2, &thisWorld);
  109.     if (thisWorld.systemVersion >= 0x0605)
  110.         haveIt = TRUE;
  111.     else
  112.         haveIt = FALSE;
  113.     return (haveIt);
  114. }
  115.  
  116. //--------------------------------------------------------------  WhatsOurDepth  
  117.  
  118. short WhatsOurDepth (void)
  119. {
  120.     short            thisDepth;
  121.     char            wasState;
  122.     
  123.     if (thisGDevice != 0L)
  124.     {
  125.         wasState = HGetState((Handle)thisGDevice);
  126.         HLock((Handle)thisGDevice);
  127.         thisDepth = (**(**thisGDevice).gdPMap).pixelSize;
  128.         HSetState((Handle)thisGDevice, wasState);
  129.     }
  130.     else
  131.         RedAlert("\pUnknown Error.");
  132.     
  133.     return (thisDepth);
  134. }
  135.  
  136. //--------------------------------------------------------------  CanWeDisplay8Bit  
  137.  
  138. Boolean CanWeDisplay8Bit (GDHandle theDevice)
  139. {
  140.     short        canDepth;
  141.     Boolean        canDo;
  142.     
  143.     canDo = FALSE;
  144.     canDepth = HasDepth(theDevice, 8, 1, 0);
  145.     if (canDepth != 0)
  146.         canDo = TRUE;
  147.     
  148.     return (canDo);
  149. }
  150.  
  151. //--------------------------------------------------------------  SwitchToDepth
  152.  
  153. void SwitchToDepth (short newDepth, Boolean doColor)
  154. {
  155.     OSErr            theErr;
  156.     short            colorFlag;
  157.     char            tagByte;
  158.     
  159.     if (doColor)
  160.         colorFlag = 1;
  161.     else
  162.         colorFlag = 0;
  163.     
  164.     if (thisGDevice != 0L)
  165.     {
  166.         tagByte = HGetState((Handle)thisGDevice);
  167.         HLock((Handle)thisGDevice);
  168.         theErr = SetDepth(thisGDevice, newDepth, 1, colorFlag);
  169.         HSetState((Handle)thisGDevice, tagByte);
  170.         if (theErr != noErr)
  171.             RedAlert("\pUnknown Error.");
  172.     }
  173.     else
  174.         RedAlert("\pUnknown Error.");
  175. }
  176.  
  177. //--------------------------------------------------------------  CheckEnvirons
  178.  
  179. void CheckEnvirons (void)
  180. {
  181.     if (!DoWeHaveColor())
  182.         RedAlert("\pGlypha II only runs in 256 colors.");
  183.     
  184.     if (!DoWeHaveSystem605())
  185.         RedAlert("\pGlypha II requires System 6.0.5 or better to run.");
  186.     
  187.     FindOurDevice();
  188.     
  189.     wasDepth = WhatsOurDepth();
  190.     if (wasDepth != 8)
  191.     {
  192.         if (CanWeDisplay8Bit(thisGDevice))
  193.             SwitchToDepth(8, TRUE);
  194.         else
  195.             RedAlert("\pGlypha II only runs in 256 colors.");
  196.     }
  197. }
  198.  
  199. //--------------------------------------------------------------  OpenMainWindow
  200.  
  201. void OpenMainWindow (void)
  202. {
  203.     SetRect(&mainWindowRect, 0, 0, 640, 460);
  204.     mainWindow = GetNewCWindow(128, 0L, kPutInFront);
  205.     SizeWindow((GrafPtr)mainWindow, mainWindowRect.right - mainWindowRect.left, 
  206.             mainWindowRect.bottom - mainWindowRect.top, FALSE);
  207.     MoveWindow((GrafPtr)mainWindow, (qd.screenBits.bounds.right - 640) / 2, 
  208.             ((qd.screenBits.bounds.bottom - 480) / 2) + LMGetMBarHeight(), TRUE);
  209.     ShowWindow((GrafPtr)mainWindow);
  210.     SetPort((GrafPtr)mainWindow);
  211.     ClipRect(&mainWindowRect);
  212.     CopyRgn(mainWindow->clipRgn, mainWindow->visRgn);
  213.     ForeColor(blackColor);
  214.     BackColor(whiteColor);
  215. }
  216.  
  217. //--------------------------------------------------------------  InitMenubar
  218.  
  219. void InitMenubar (void)
  220. {
  221.     appleMenu = GetMenu(128);
  222.     if (appleMenu == 0L)
  223.         RedAlert("\pCouldn't Load Menus Error");
  224.     AddResMenu(appleMenu, 'DRVR');
  225.     InsertMenu(appleMenu, 0);
  226.     
  227.     gameMenu = GetMenu(129);
  228.     if (gameMenu == 0L)
  229.         RedAlert("\pCouldn't Load Menus Error");
  230.     InsertMenu(gameMenu, 0);
  231.     
  232.     optionsMenu = GetMenu(130);
  233.     if (optionsMenu == 0L)
  234.         RedAlert("\pCouldn't Load Menus Error");
  235.     InsertMenu(optionsMenu, 0);
  236.     
  237.     DrawMenuBar();
  238. }
  239.  
  240. //--------------------------------------------------------------  InitVariables
  241.  
  242. void InitVariables (void)
  243. {
  244.     short        i;
  245.     
  246.     quitting = FALSE;
  247.     playing = FALSE;
  248.     pausing = FALSE;
  249.     canPlay = FALSE;
  250.     whichList = TRUE;
  251.     helpOpen = FALSE;
  252.     scoresOpen = FALSE;
  253.     openTheScores = FALSE;
  254.     
  255.     numLedges = 3;
  256.     beginOnLevel = 1;
  257.     levelOn = 0;
  258.     livesLeft = kInitNumLives;
  259.     theScore = 0L;
  260.     wasTensOfThousands = 0L;
  261.     GenerateLightning(320, 240);
  262.     
  263.     backSrcRect = mainWindowRect;
  264.     ZeroRectCorner(&backSrcRect);
  265.     backSrcMap = 0L;
  266.     CreateOffScreenPixMap(&backSrcRect, &backSrcMap);
  267.     LoadGraphic(kBackgroundPictID);
  268.     
  269.     workSrcRect = mainWindowRect;
  270.     ZeroRectCorner(&workSrcRect);
  271.     workSrcMap = 0L;
  272.     CreateOffScreenPixMap(&workSrcRect, &workSrcMap);
  273.     
  274.     SetRect(&obSrcRect, 0, 0, 20, 418);
  275.     obeliskSrcMap = 0L;
  276.     CreateOffScreenPixMap(&obSrcRect, &obeliskSrcMap);
  277.     LoadGraphic(kObeliskPictID);
  278.     SetRect(&obeliskRects[0], 0, 0, 20, 209);
  279.     OffsetRect(&obeliskRects[0], 0, 0);
  280.     SetRect(&obeliskRects[1], 0, 0, 20, 209);
  281.     OffsetRect(&obeliskRects[1], 0, 209);
  282.     SetRect(&obeliskRects[2], 0, 0, 20, 209);
  283.     OffsetRect(&obeliskRects[2], 161, 250);
  284.     SetRect(&obeliskRects[3], 0, 0, 20, 209);
  285.     OffsetRect(&obeliskRects[3], 457, 250);
  286.     
  287.     SetRect(&playerSrcRect, 0, 0, 48, 436);
  288.     playerSrcMap = 0L;
  289.     CreateOffScreenPixMap(&playerSrcRect, &playerSrcMap);
  290.     LoadGraphic(kPlayerPictID);
  291.     playerMaskMap = 0L;
  292.     CreateOffScreenBitMap(&playerSrcRect, &playerMaskMap);
  293.     LoadGraphic(kPlayerMaskID);
  294.     
  295.     SetRect(&enemyWalkSrcRect, 0, 0, 48, 576);
  296.     enemyWalkSrcMap = 0L;
  297.     CreateOffScreenPixMap(&enemyWalkSrcRect, &enemyWalkSrcMap);
  298.     LoadGraphic(kEnemyWalkPictID);
  299.     enemyWalkMaskMap = 0L;
  300.     CreateOffScreenBitMap(&enemyWalkSrcRect, &enemyWalkMaskMap);
  301.     LoadGraphic(kEnemyWalkMaskID);
  302.     SetRect(&enemyFlySrcRect, 0, 0, 64, 480);
  303.     enemyFlySrcMap = 0L;
  304.     CreateOffScreenPixMap(&enemyFlySrcRect, &enemyFlySrcMap);
  305.     LoadGraphic(kEnemyFlyPictID);
  306.     enemyFlyMaskMap = 0L;
  307.     CreateOffScreenBitMap(&enemyFlySrcRect, &enemyFlyMaskMap);
  308.     LoadGraphic(kEnemyFlyMaskID);
  309.     for (i = 0; i < 12; i++)
  310.     {
  311.         SetRect(&enemyRects[i], 0, 0, 48, 48);
  312.         OffsetRect(&enemyRects[i], 0, 48 * i);
  313.     }
  314.     for (i = 0; i < 12; i++)
  315.     {
  316.         SetRect(&enemyRects[i + 12], 0, 0, 64, 40);
  317.         OffsetRect(&enemyRects[i + 12], 0, 40 * i);
  318.     }
  319.     SetRect(&enemyInitRects[0], 0, 0, 48, 1);
  320.     OffsetRect(&enemyInitRects[0], 72, 284);
  321.     SetRect(&enemyInitRects[1], 0, 0, 48, 1);
  322.     OffsetRect(&enemyInitRects[1], 520, 284);
  323.     SetRect(&enemyInitRects[2], 0, 0, 48, 1);
  324.     OffsetRect(&enemyInitRects[2], 72, 105);
  325.     SetRect(&enemyInitRects[3], 0, 0, 48, 1);
  326.     OffsetRect(&enemyInitRects[3], 520, 105);
  327.     SetRect(&enemyInitRects[4], 0, 0, 48, 1);
  328.     OffsetRect(&enemyInitRects[4], 296, 190);
  329.     
  330.     SetRect(&eggSrcRect, 0, 0, 24, 24);
  331.     eggSrcMap = 0L;
  332.     CreateOffScreenPixMap(&eggSrcRect, &eggSrcMap);
  333.     LoadGraphic(kEggPictID);
  334.     eggMaskMap = 0L;
  335.     CreateOffScreenBitMap(&eggSrcRect, &eggMaskMap);
  336.     LoadGraphic(kEggMaskID);
  337.     
  338.     SetRect(&eyeSrcRect, 0, 0, 48, 124);
  339.     eyeSrcMap = 0L;
  340.     CreateOffScreenPixMap(&eyeSrcRect, &eyeSrcMap);
  341.     LoadGraphic(kEyePictID);
  342.     eyeMaskMap = 0L;
  343.     CreateOffScreenBitMap(&eyeSrcRect, &eyeMaskMap);
  344.     LoadGraphic(kEyeMaskID);
  345.     for (i = 0; i < 4; i++)
  346.     {
  347.         SetRect(&eyeRects[i], 0, 0, 48, 31);
  348.         OffsetRect(&eyeRects[i], 0, i * 31);
  349.     }
  350.     
  351.     SetRect(&handSrcRect, 0, 0, 56, 114);
  352.     handSrcMap = 0L;
  353.     CreateOffScreenPixMap(&handSrcRect, &handSrcMap);
  354.     LoadGraphic(kHandPictID);
  355.     handMaskMap = 0L;
  356.     CreateOffScreenBitMap(&handSrcRect, &handMaskMap);
  357.     LoadGraphic(kHandMaskID);
  358.     SetRect(&handRects[0], 0, 0, 56, 57);
  359.     OffsetRect(&handRects[0], 0, 0);
  360.     SetRect(&handRects[1], 0, 0, 56, 57);
  361.     OffsetRect(&handRects[1], 0, 57);
  362.     SetRect(&grabZone, 0, 0, 96, 108);
  363.     OffsetRect(&grabZone, 48, 352);
  364.     
  365.     SetRect(&idleSrcRect, 0, 0, 48, 48);
  366.     idleSrcMap = 0L;
  367.     CreateOffScreenPixMap(&idleSrcRect, &idleSrcMap);
  368.     LoadGraphic(kIdlePictID);
  369.     
  370.     SetRect(&flameSrcRect, 0, 0, 16, 64);
  371.     flameSrcMap = 0L;
  372.     CreateOffScreenPixMap(&flameSrcRect, &flameSrcMap);
  373.     LoadGraphic(kFlamePictID);
  374.     SetRect(&flameDestRects[0], 0, 0, 16, 16);
  375.     OffsetRect(&flameDestRects[0], 87, 325);
  376.     SetRect(&flameDestRects[1], 0, 0, 16, 16);
  377.     OffsetRect(&flameDestRects[1], 535, 325);
  378.     for (i = 0; i < 4; i++)
  379.     {
  380.         SetRect(&flameRects[i], 0, 0, 16, 16);
  381.         OffsetRect(&flameRects[i], 0, i * 16);
  382.     }
  383.     
  384.     SetRect(&numberSrcRect, 0, 0, 8, 121);
  385.     numberSrcMap = 0L;
  386.     CreateOffScreenPixMap(&numberSrcRect, &numberSrcMap);
  387.     LoadGraphic(kNumberPictID);
  388.     for (i = 0; i < 11; i++)
  389.     {
  390.         SetRect(&numbersSrc[i], 0, 0, 8, 11);
  391.         OffsetRect(&numbersSrc[i], 0, 11 * i);
  392.     }
  393.     SetRect(&numbersDest[0], 0, 0, 8, 11);    // # of lives digit 1
  394.     OffsetRect(&numbersDest[0], 229, 443);
  395.     SetRect(&numbersDest[1], 0, 0, 8, 11);    // # of lives digit 2
  396.     OffsetRect(&numbersDest[1], 237, 443);
  397.     SetRect(&numbersDest[2], 0, 0, 8, 11);    // score digit 1
  398.     OffsetRect(&numbersDest[2], 293, 443);
  399.     SetRect(&numbersDest[3], 0, 0, 8, 11);    // score digit 2
  400.     OffsetRect(&numbersDest[3], 301, 443);
  401.     SetRect(&numbersDest[4], 0, 0, 8, 11);    // score digit 3
  402.     OffsetRect(&numbersDest[4], 309, 443);
  403.     SetRect(&numbersDest[5], 0, 0, 8, 11);    // score digit 4
  404.     OffsetRect(&numbersDest[5], 317, 443);
  405.     SetRect(&numbersDest[6], 0, 0, 8, 11);    // score digit 5
  406.     OffsetRect(&numbersDest[6], 325, 443);
  407.     SetRect(&numbersDest[7], 0, 0, 8, 11);    // score digit 6
  408.     OffsetRect(&numbersDest[7], 333, 443);
  409.     SetRect(&numbersDest[8], 0, 0, 8, 11);    // # of level digit 1
  410.     OffsetRect(&numbersDest[8], 381, 443);
  411.     SetRect(&numbersDest[9], 0, 0, 8, 11);    // # of level digit 2
  412.     OffsetRect(&numbersDest[9], 389, 443);
  413.     SetRect(&numbersDest[10], 0, 0, 8, 11);    // # of level digit 3
  414.     OffsetRect(&numbersDest[10], 397, 443);
  415.     
  416.     SetRect(&playerRects[0], 0, 0, 48, 37);
  417.     OffsetRect(&playerRects[0], 0, 0);
  418.     SetRect(&playerRects[1], 0, 0, 48, 37);
  419.     OffsetRect(&playerRects[1], 0, 37);
  420.     SetRect(&playerRects[2], 0, 0, 48, 37);
  421.     OffsetRect(&playerRects[2], 0, 74);
  422.     SetRect(&playerRects[3], 0, 0, 48, 37);
  423.     OffsetRect(&playerRects[3], 0, 111);
  424.     SetRect(&playerRects[4], 0, 0, 48, 48);
  425.     OffsetRect(&playerRects[4], 0, 148);
  426.     SetRect(&playerRects[5], 0, 0, 48, 48);
  427.     OffsetRect(&playerRects[5], 0, 196);
  428.     SetRect(&playerRects[6], 0, 0, 48, 48);
  429.     OffsetRect(&playerRects[6], 0, 244);
  430.     SetRect(&playerRects[7], 0, 0, 48, 48);
  431.     OffsetRect(&playerRects[7], 0, 292);
  432.     SetRect(&playerRects[8], 0, 0, 48, 37);        // falling bones rt.
  433.     OffsetRect(&playerRects[8], 0, 340);
  434.     SetRect(&playerRects[9], 0, 0, 48, 37);        // falling bones lf.
  435.     OffsetRect(&playerRects[9], 0, 377);
  436.     SetRect(&playerRects[10], 0, 0, 48, 22);    // pile of bones
  437.     OffsetRect(&playerRects[10], 0, 414);
  438.     
  439.     MoveTo(0, 0);            // generate clipping region that excludes the obelisks
  440.     playRgn = NewRgn();
  441.     OpenRgn();
  442.     LineTo(0, 450);
  443.     LineTo(161, 450);
  444.     LineTo(161, 269);
  445.     LineTo(172, 250);
  446.     LineTo(182, 269);
  447.     LineTo(182, 450);
  448.     LineTo(457, 450);
  449.     LineTo(457, 269);
  450.     LineTo(468, 250);
  451.     LineTo(478, 269);
  452.     LineTo(478, 450);
  453.     LineTo(640, 450);
  454.     LineTo(640, 0);
  455.     LineTo(0, 0);
  456.     CloseRgn(playRgn);
  457.     MoveHHi((Handle)playRgn);
  458.     HLock((Handle)playRgn);
  459.     
  460.     SetRect(&platformSrcRect, 0, 0, 191, 192);
  461.     platformSrcMap = 0L;
  462.     CreateOffScreenPixMap(&platformSrcRect, &platformSrcMap);
  463.     LoadGraphic(kPlatformPictID);
  464.     for (i = 0; i < 6; i++)
  465.     {
  466.         SetRect(&platformCopyRects[i], 0, 0, 191, 32);
  467.         OffsetRect(&platformCopyRects[i], 0, 32 * i);
  468.     }
  469.     SetRect(&platformCopyRects[6], 233, 190, 424, 222);
  470.     SetRect(&platformCopyRects[7], 0, 105, 191, 137);
  471.     SetRect(&platformCopyRects[8], 449, 105, 640, 137);
  472.     
  473.     SetRect(&platformRects[0], 206, 424, 433, 438);        //_______________
  474.     SetRect(&platformRects[1], -256, 284, 149, 298);    //
  475.     SetRect(&platformRects[2], 490, 284, 896, 298);        //--3--     --4--
  476.     SetRect(&platformRects[3], -256, 105, 149, 119);    //     --5--
  477.     SetRect(&platformRects[4], 490, 105, 896, 119);        //--1--     --2--
  478.     SetRect(&platformRects[5], 233, 190, 407, 204);        //_____--0--_____
  479.     
  480.     for (i = 0; i < 6; i++)
  481.     {
  482.         touchDownRects[i] = platformRects[i];
  483.         touchDownRects[i].left += 23;
  484.         touchDownRects[i].right -= 23;
  485.         touchDownRects[i].bottom = touchDownRects[i].top;
  486.         touchDownRects[i].top = touchDownRects[i].bottom - 11;
  487.     }
  488.     
  489.     SetRect(&helpSrcRect, 0, 0, 231, 398);
  490.     helpSrcMap = 0L;
  491.     CreateOffScreenPixMap(&helpSrcRect, &helpSrcMap);
  492.     LoadGraphic(kHelpPictID);
  493.     
  494.     SetPort((GrafPtr)mainWindow);
  495. }
  496.  
  497. //--------------------------------------------------------------  ShutItDown
  498.  
  499. void ShutItDown (void)
  500. {
  501.     if (wasDepth != WhatsOurDepth())
  502.         SwitchToDepth(wasDepth, TRUE);
  503. }
  504.  
  505.